MySQL マルチソースレプリケーション
概要
MySQL 5.7から搭載された機能。
基本的にレプリケーションはマスター:スレーブ=1:Nが基本で、マスター:スレーブ=N:1は無理だった。
それが5.7からは、マスター:スレーブ=N:1もできるようになった。
ユースケース
シャーディングした複数のDBを再度1つのDBに統合したい
など...
設定方法(基本)
1. ...(マスター側の設定はそれぞれで適当に)
2. スレーブ側でマスター①を登録(FOR CHANNEL記述を利用)
3. スレーブ側でマスターNを登録(FOR CHANNEL記述を利用)
4. 各マスターとのレプリケーションを開始(START SLAVE FOR CHANNEL 'master1')
レプリケーションフィルタリングとの連携
ただ、ここで注意点があるので認識しておくこと。
MySQL 5.7では、グローバルでのフィルタリングしかできない。つまり、チャンネルごと(マスターごと)にレプリケーションするDBやTableを決めることができない。
対して、MySQL8.0からは、チャンネルごとにレプリケーションのフィルタリングが可能になっている。
全体的な注意点
チャンネルごとのフィルタリングをしない場合は、複数マスター側の更新に注意する
規律正しくマスター側を更新しないと、レプリカ側で二重書き込みやプライマリキー重複エラーなどが発生する。
フィルタリングで、別々DB・テーブルとかを担当してるとかでない限り、細心の注意を払って規則正しく更新させることが大事。